#Clase que se encarga de todo lo relacionado con la ordenes como lo es
#crear ordenes,mostrarlas y generar la facura
class OrdensController < ApplicationController
  # GET /ordens
  # GET /ordens.xml
  

# Metodo que muestra todas las ordenes hechas por un cliente
  def index
    @ordens = Orden.all(:conditions =>["cliente_id = ?", session[:cliente_id]])
    @color
    @contcolor=0
    @notificacion=0

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @ordens }
    end
  end
  
  # GET /ordens/1
  # GET /ordens/1.xml
 
#  Metodo que muestra la orden generada por cliente y adicionalmete
#  se genera el codigo QR en la orden que se muestra
 
  def show
    @orden = Orden.find(params[:id])
    @cliente= Cliente.find(:first, :conditions => [" id = ?",session[:cliente_id] ])
    @direccion= Direccion.find(:first, :conditions => [" id = ?",@orden.direccion_id ])
    @paquete= Paquete.all(:conditions => [" orden_id = ?",@orden.id ])
    @total=0
    @color
    @contcolor=0
    @paquete.each do |p|
    	p.update_attribute('costo', p.peso*3)
      @total = @total + p.costo
    end
    @orden.update_attribute('tracking', @orden.id)
    
    @subtotal=@total
    @iva= @total *0.12
    @total = @total +@iva
    @orden.update_attribute('total', @total)
    
      @qr = "http://chart.apis.google.com/chart?chs=220x220&cht=qr&chl=http://"+local_ip+":3000/ordens/recolectado/" + @orden.id.to_s


    respond_to do |format|
      format.html # show.html.erb
      format.pdf { render :format=>false}
      format.xml  { render :xml => @orden }
    end
  end

  # GET /ordens/new
  # GET /ordens/new.xml

#  Metodo que se encarga de montar la interfaz para que el cliente haga su orden
  def new
    @orden = Orden.new
    @orden.paquetes.build
    @orden.etapas.build
    @pagos = Pago.all(:conditions => ["cliente_id= ?", session[:cliente_id]])
    @direcciones = Direccion.all(:conditions =>["cliente_id = ?", session[:cliente_id]])
    @body_tag = '<body onload="initialize()">'

    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml => @orden }
    end
  end

  # GET /ordens/1/edit
  def edit
    @orden = Orden.find(params[:id])
  end

  # POST /ordens
  # POST /ordens.xml

#  Metodo que se encarga de crear la orden en la base de datos despues que el cliente genera su orden
  def create
    @orden = Orden.new(params[:orden])
    @direcciones = Direccion.all(:conditions =>["cliente_id = ?", session[:cliente_id]])
    @pagos = Pago.all(:conditions => ["cliente_id= ?", session[:cliente_id]])
    
     respond_to do |format|
       
        if @orden.save
          etapa= Etapa.new
          etapa.descripcion='Pendiente por Recoleccion'
          etapa.fecha= Time.new.strftime("%m/%d/%Y %H:%M:%S")
          etapa.orden_id=@orden.id
          etapa.save
          format.html { redirect_to(@orden, :notice => 'La orden ha sido creada satisfactoriamente') }
          format.xml  { render :xml => @orden, :status => :created, :location => @orden }
        else
           @body_tag = '<body onload="initialize()">'
          format.html { render :action => "new" }
          format.xml  { render :xml => @orden.errors, :status => :unprocessable_entity }
        end
       end
    end
  # PUT /ordens/1
  # PUT /ordens/1.xml
  def update
    @orden = Orden.find(params[:id])

    respond_to do |format|
      if @orden.update_attributes(params[:orden])
        format.html { redirect_to(@orden, :notice => 'Orden was successfully updated.') }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @orden.errors, :status => :unprocessable_entity }
      end
    end
  end

  def menu
    render :template => "ordens/menu"
  end

  # DELETE /ordens/1
  # DELETE /ordens/1.xml
  def destroy
    @orden = Orden.find(params[:id])
    @orden.destroy

    respond_to do |format|
      format.html { redirect_to(ordens_url) }
      format.xml  { head :ok }
    end
  end
# Metodo que llama el codigo el qr para notificar que la orden fue recolectada
# y adicional genera el xml como respuesta
    def recolectado
     @orden = Orden.first(:conditions => [" tracking = ? ", params[:id]])
     @orden.update_attribute('status', 'Recolectada' )
     @orden.update_attribute('fechaRecoleccion', Time.new.strftime("%m/%d/%Y %H:%M:%S") )
    
    respond_to do |format|
        format.xml {render :status => :created}
    end
  end
# Metodo que se encarga de listar todas las ordenes pendientes por entregar
   def orden_entregar
    @color
    @contcolor=0

    @ordens= Orden.find_by_sql("select count(pa.id) as cuenta,ord.id,ord.tracking,ord.fechaRecoleccion,ord.fechaOrden,ord.pais,
              ord.ciudad,em.nombre as renombre,em.apellido as reapellido, emp.nombre as denombre,
              emp.apellido as deapellido from ordens ord, rutas ru,empleados em, empleados emp,paquetes pa
              where ord.status='Recolectada' and ord.ruta_id = ru.id
              and ru.empleado_recolector_id=em.id and ru.empleado_despachador_id=emp.id and ord.id=pa.orden_id group by (pa.orden_id)")
 
    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @ordens }
    end
  end
#Metodo que se encarga de cambiar el status a la orden a entregado y adicionalmente crea la etapa
   def orden_despachar
    
     @orden = Orden.first(:conditions => [" id = ? ", params[:id]])
     @orden.update_attribute('status', 'Entregada' )
            etapa= Etapa.new
            etapa.descripcion='Entregado'
            etapa.fecha= Time.new.strftime("%m/%d/%Y %H:%M:%S")
            etapa.orden_id=@orden.id
            etapa.save
     
    flash[:notice] = 'Cambiado el Status a Entregado de la Orden Numero: '+@orden.tracking.to_s+' '
    redirect_to :controller => 'ordens', :action => 'orden_entregar'
    
  end


   def orden_aprobar

     @orden = Orden.first(:conditions => [" id = ? ", params[:id]])
     @orden.update_attribute('statusRecargo', '2' )

    flash[:notice] = 'Ha sido aprobado la entrega por parte de un socio de la Orden Numero: '+@orden.tracking.to_s+' '
    redirect_to :controller => 'ordens', :action => 'index'

  end

    def orden_desaprobar

     @orden = Orden.first(:conditions => [" id = ? ", params[:id]])
     @orden.update_attribute('statusRecargo', '3' )

    flash[:notice] = 'Ha sido desaprobada la entrega por parte de un socio de la Orden Numero: '+@orden.tracking.to_s+' '
    redirect_to :controller => 'ordens', :action => 'index'

  end


#Metodo que se encarga de buscar la orden traves de la obtencion del tracking (atributo del objeto orden)
# y muestra los pasos por los que ha pasado la orden, este metodo es llamado desde
# los controladores application(home), ordens(index)
  def track 
   @color
   @contcolor=0
   if params[:tracking]
     @orden = Orden.first(:conditions => [" tracking = ? ", params[:tracking]])
        if @orden
#          @orden.etapas.build
          if @orden.status == 'Recoleccion Externa'
            redirect_to :controller => 'rest_liq', :action => 'solicitar_etapa', :id=> params[:tracking]
          else
              @etapas = Etapa.all(:conditions =>["orden_id = ?", @orden.id])
          end
        else
          flash[:notice] = 'Disculpe, numero de tracking no encontrado'
          redirect_to :controller => 'application', :action => 'home'
        end
     else
     flash[:notice] = 'Disculpe, numero de tracking vacio'
     redirect_to :controller => 'application', :action => 'home'
   end
  end


end
